const UQRCode = {};

// 定义纠错等级
UQRCode.errorCorrectLevel = {
  L: 1,
  M: 0,
  Q: 3,
  H: 2
};

// 二维码生成方法
UQRCode.make = function(options) {
  if (!options.canvasId) {
    console.error('canvasId is required');
    return;
  }

  if (!options.text) {
    console.error('text is required');
    return;
  }

  const ctx = uni.createCanvasContext(options.canvasId, options.componentInstance);
  const size = options.size || 200;
  const margin = options.margin || 10;
  const backgroundColor = options.backgroundColor || '#ffffff';
  const foregroundColor = options.foregroundColor || '#000000';
  
  // 清空画布
  ctx.setFillStyle(backgroundColor);
  ctx.fillRect(0, 0, size, size);
  
  // 绘制二维码
  const qrCodeSize = size - (margin * 2);
  const cellSize = Math.floor(qrCodeSize / 25); // 25是标准二维码的矩阵大小
  
  // 生成二维码数据矩阵
  const matrix = generateQRMatrix(options.text);
  
  // 绘制矩阵
  ctx.setFillStyle(foregroundColor);
  for (let row = 0; row < matrix.length; row++) {
    for (let col = 0; col < matrix[row].length; col++) {
      if (matrix[row][col]) {
        const x = margin + (col * cellSize);
        const y = margin + (row * cellSize);
        ctx.fillRect(x, y, cellSize, cellSize);
      }
    }
  }
  
  // 绘制到画布
  ctx.draw();
};

// 生成二维码矩阵
function generateQRMatrix(text) {
  // 这里使用一个简单的示例矩阵
  // 实际应用中需要使用完整的二维码生成算法
  const size = 25;
  const matrix = Array(size).fill().map(() => Array(size).fill(0));
  
  // 添加定位图案
  // 左上角
  for (let i = 0; i < 7; i++) {
    for (let j = 0; j < 7; j++) {
      if (
        (i === 0 || i === 6 || j === 0 || j === 6) ||
        (i >= 2 && i <= 4 && j >= 2 && j <= 4)
      ) {
        matrix[i][j] = 1;
      }
    }
  }
  
  // 右上角
  for (let i = 0; i < 7; i++) {
    for (let j = size - 7; j < size; j++) {
      if (
        (i === 0 || i === 6 || j === size - 7 || j === size - 1) ||
        (i >= 2 && i <= 4 && j >= size - 5 && j <= size - 3)
      ) {
        matrix[i][j] = 1;
      }
    }
  }
  
  // 左下角
  for (let i = size - 7; i < size; i++) {
    for (let j = 0; j < 7; j++) {
      if (
        (i === size - 7 || i === size - 1 || j === 0 || j === 6) ||
        (i >= size - 5 && i <= size - 3 && j >= 2 && j <= 4)
      ) {
        matrix[i][j] = 1;
      }
    }
  }
  
  // 添加一些数据点（示例）
  const data = text.split('').map(char => char.charCodeAt(0));
  let dataIndex = 0;
  for (let i = 8; i < size - 8; i++) {
    for (let j = 8; j < size - 8; j++) {
      if (dataIndex < data.length) {
        matrix[i][j] = data[dataIndex] % 2;
        dataIndex++;
      }
    }
  }
  
  return matrix;
}

export default UQRCode; 